//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Luz.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)
Luz::Luz(GLenum fuente,GLfloat pos[4],GLfloat amb[4], GLfloat dif[4], GLfloat esp[4]){
   fuenteLuz = fuente;
   encendida = false;
   esFoco = false;

   glDisable(fuenteLuz);

   for (int i=0; i<4;i++){
      posicion[i]=pos[i];
      ambiente[i]=amb[i];
      difusa[i]=dif[i];
      especular[i]=esp[i];
   }
}

Luz::Luz(GLenum fuente,GLfloat pos[4],GLfloat amb[4], GLfloat dif[4], GLfloat esp[4],GLfloat dir[3],GLfloat ang ,GLfloat exp){
   fuenteLuz = fuente;
   encendida = true;
   esFoco = true;

   glDisable(fuenteLuz);

   for (int i=0; i<4;i++){
      posicion[i]=pos[i];
      ambiente[i]=amb[i];
      difusa[i]=dif[i];
      especular[i]=esp[i];
   }

   for (int i=0; i<3;i++)
     direccion[i]=dir[i];

  angulo=ang;
  exponente=exp;
}


void Luz::cambiarEstadoEncendida()
{
  encendida = !encendida;
  if (encendida) glEnable(fuenteLuz);
  else  glDisable(fuenteLuz);
}

void Luz::dibuja(){
        if (encendida){

                glLightfv(fuenteLuz,GL_POSITION,posicion);
                glLightfv(fuenteLuz,GL_AMBIENT,ambiente);
                glLightfv(fuenteLuz,GL_DIFFUSE,difusa);
                glLightfv(fuenteLuz,GL_SPECULAR,especular);
                if(esFoco){
                        glLightfv(fuenteLuz,GL_SPOT_DIRECTION,direccion);
                        glLightf(fuenteLuz,GL_SPOT_CUTOFF,angulo);
                        glLightf(fuenteLuz,GL_SPOT_EXPONENT,exponente);
                }
        }
}

void Luz::cambiaAngulo(float ang){
    angulo=ang;
}
